// 第K个语法符号
// 在第一行我们写上一个 0。接下来的每一行，将前一行中的0替换为01，1替换为10。

// 给定行数 N 和序数 K，返回第 N 行中第 K个字符。（K从1开始）


// 例子:

// 输入: N = 1, K = 1
// 输出: 0

// 输入: N = 2, K = 1
// 输出: 0

// 输入: N = 2, K = 2
// 输出: 1

// 输入: N = 4, K = 5
// 输出: 1

// 解释:
// 第一行: 0
// 第二行: 01
// 第三行: 0110
// 第四行: 01101001

// 注意：

// N 的范围 [1, 30].
// K 的范围 [1, 2^(N-1)].

int kthGrammar(int N, int K) {
    if (N == 1) return 0;
    int flag = 0;
    if (K / 2 * 2 < K) {
        K = K / 2 + 1;
        flag = 1;
    }
    else {
        K = K / 2;
    }
    int i = kthGrammar(N - 1, K);
    if (i == 1) {
        if (flag)
            return 1;
        else
            return 0;
    }
    else {
        if (flag)
            return 0;
        else
            return 1;
    }
}